#include "board.h"
#include "element.h"
#include "control.h"
#include "buzz.h"
#include "encode.h"
#include "EC11.h"
#include "imu.h"
#include "dma.h"

extern bit SpiDmaFlag;

void Common_Isr() interrupt 13
{
    uint8 GPIO0_INTF = P0INTF;
    uint8 GPIO1_INTF = P1INTF;

    if (GPIO0_INTF)
    {
        P0INTF = 0x00;
        if (GPIO0_INTF & 0x04)
        {
            // 出库的时候会屏蔽倒车入库
            if ((Ctrl.Car == ENABLE) && (Counter.Main > 200) && (Elem.Road == No_Elem))
            {
                Elem_Reset(ON);
                Elem.Road = Into_The_Garage_And_Stop;
                Ctrl.Velocity = Response[Into_The_Garage_And_Stop][0].Speed;
                Elem.State = Response[Into_The_Garage_And_Stop][0].State;
                IMU_SetYaw(Response[Into_The_Garage_And_Stop][0].Angle);
            }
            if (Elem.LaserSW == ENABLE && (GPIO0_INTF & 0x08))
            {
                if ((Ctrl.Car == ENABLE) && (Counter.Main > 300) && (Elem.Road == No_Elem) && (Elem.SubRoad == No_Elem))
                {
                    Elem.StartTime = Counter.Tim4;
                    Elem.SubRoad = OpenJunction;
                }
            }
        }

        if (GPIO1_INTF)
        {
            P1INTF = 0x00;
            // 正交编码器不用两个都判断上升,判断一个上升,另一个看电平就知道方向了
            // 改完之后好用多了，就是屏幕的刷新率上不去导致比较难用，因为SPI的DMA尝试失败了
            // 改SPI的传输分频也没用，或许这就是STC32G吧
            if (EC11_B_Pin)
            {
                EC11.encoRealVal++;
            }
            else
            {
                EC11.encoRealVal--;
            }
        }

        // if (DMA_UR1T_STA & 0x01) // 发送完成中断标志为1时
        // {
        //     DMA_UR1T_STA &= ~0x01; // 清零发送完成中断标志
        //     DMAUart1TxBusy = DISABLE;
        // }
        // if (DMA_UR1T_STA & 0x04) // 数据覆盖中断标志为1时
        // {
        //     DMA_UR1T_STA &= ~0x04; // 清零数据覆盖中断标志
        // }
        // if (DMA_UR1R_STA & 0x01) // 接收完成中断标志为1时
        // {
        //     DMA_UR1R_STA &= ~0x01; // 清零接收完成中断标志
        //     // DmaRxFlag = 1;	// 接收完成标志置1
        // }
        // if (DMA_UR1R_STA & 0x02) // 数据丢弃中断标志为1时
        // {
        //     DMA_UR1R_STA &= ~0x02; // 清零数据丢弃中断标志
        // }
    }
}